package PruebasUnitarias;

import java.util.ArrayList;
import java.util.Iterator;

import Modelo.*;

public class PruebaXML {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Juego juego= new Juego("listaniveles.xml");
		
		try {
		//	juego.inicializarNivel(7);
			juego.cargarJuego("savedgame1.xml");
		} 
		catch (MapaInvalidoException e) {
			System.out.println(e.mostrarMensaje());
			System.exit(0);
		}
		catch (NivelInexistenteException e) {
			System.out.println("Nivel inexistente");
			System.exit(0);
		}
		
	//	juego.toString();
		
		System.out.println("nivel: " + juego.getNivel());
				
		ArrayList<Habilidad> h=(ArrayList<Habilidad>) juego.getHabilidades();
		
		Habilidad laser1=null,laser2=null,taladro=null,congelamiento=null,tunel=null,platillo=null, tele=null;
		
		for(int i=0; i<h.size() ; i++){
			Habilidad aux= h.get(i);
			if(aux instanceof Laser){
				if(laser1==null)
					laser1=aux;
				else
					laser2=aux;
			}
			if(aux instanceof Taladro)
					taladro=aux;
			if(aux instanceof Teletransportacion)
				tele=aux;
			if(aux instanceof Congelamiento)
					congelamiento=aux;
			if(aux instanceof TunelElectromagnetico)
				tunel=aux;
			if(aux instanceof PlatilloVolador)
				platillo=aux;

		}
		PoseedorDeHabilidad p=null, q=null;
		
		int i=0;
		Iterator<Personaje> ite=null; 
		
		while(juego.getEstado()==Constantes.activo){
			if(i==2){
				ite=juego.getMapa().getAlojador().getAlojados().iterator();
				p= (PoseedorDeHabilidad) ite.next();
				q= (PoseedorDeHabilidad) ite.next();
			}
			if(i==7){
				juego.asignarHabilidadA(p,laser1);
			}		
			if(i==24){
				juego.asignarHabilidadA(q,taladro);				
			}
			if(i==42){
				juego.asignarHabilidadA(p,congelamiento);
			}
			if(i==55){
				juego.asignarHabilidadA(q,laser2);				
			}
			if(i==70){
				juego.asignarHabilidadA(q,platillo);
			}
			if(i==78){
				juego.asignarHabilidadA(q,tunel);
			}
			if(i==94){
				juego.asignarHabilidadA(q,tele);
			}
			
			System.out.println(i + ":\n" + juego.getMapa().toString());
			
			juego.ciclo();
//			System.out.println(juego.getMapa().naveTransbordo().getAlojados().size());
			i++;
		}
		
		System.out.println(i + ":\n" + juego.getMapa().toString()+"\n");
		if(juego.getEstado()==Constantes.victoria)
			System.out.println("GANASTE");
		else
			System.out.println("PERDISTE");
		
		try {
			juego.siguienteNivel();
		} catch (MapaInvalidoException e) {
			System.out.println(e.mostrarMensaje());
			System.exit(0);
		} catch (NivelInexistenteException e) {
			System.out.println("GAME OVER YOU WIN!!!");
			System.exit(0);
		}
		juego.guardarJuego("savedgame2.xml");
		
		System.out.println("nivel: " + juego.getNivel());
		while(juego.getEstado()== Constantes.activo){
			juego.ciclo();
			System.out.println(juego.getMapa().toString());
		}
		if(juego.getEstado()==Constantes.victoria)
			System.out.println("GANASTE");
		else
			System.out.println("PERDISTE");
		
		try {
			juego.siguienteNivel();
		} catch (MapaInvalidoException e) {
			System.out.println(e.mostrarMensaje());
			System.exit(0);
		} catch (NivelInexistenteException e) {
			System.out.println("GAME OVER YOU WIN!!!");
			System.exit(0);
		}
		juego.guardarJuego("savedgame3.xml");
		
		System.out.println("nivel: " + juego.getNivel());
		while(juego.getEstado()== Constantes.activo){
			juego.ciclo();
			System.out.println(juego.getMapa().toString());
		}
		if(juego.getEstado()==Constantes.victoria)
			System.out.println("GANASTE");
		else
			System.out.println("PERDISTE");
		
		try {
			juego.siguienteNivel();
		} catch (MapaInvalidoException e) {
			System.out.println(e.mostrarMensaje());
			System.exit(0);
		} catch (NivelInexistenteException e) {
			System.out.println("GAME OVER YOU WIN!!!");
			System.exit(0);
		}
		
	}
}
